﻿
namespace ObjectPool
{
    /// <summary>
    /// 由对象池触发的被管理对象事件，特别注意，所有方法不可以抛出异常，若抛出异常会影响对象池中后续代码的执行
    /// </summary>
    public interface IManagedEvent
    {
        /// <summary>
        /// 第一次向对象池中存入时触发
        /// </summary>
        void OnStore();

        /// <summary>
        /// 从池中取出对象时触发
        /// </summary>
        void OnExtract();

        /// <summary>
        /// 重新向对象池中存入时触发
        /// </summary>
        void OnRestore();

        /// <summary>
        /// 对象池释放对象时触发，该事件会在 <see cref="IManaged.Clear"/> 之前调用
        /// </summary>
        void OnRelease();
    }
}
